package com.itheima.interceptor;

import com.alibaba.fastjson.JSON;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义拦截器
 */
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {

    //在Controller的方法之前执行。方法返回true表示放行。方法返回false表示拦截。
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        log.info("RemoteAddr={}", request.getRemoteAddr());
        if (request.getRemoteAddr().contains("192.168")) {
            Result not_login = Result.error("NOT_LOGIN");
            response.getWriter().write(JSON.toJSONString(not_login));
            return false;
        }

        //1. 获取令牌（前端怎么携带的令牌？通过token请求头携带）request对象获取请求信息
        String token = request.getHeader("token");

        //2. 校验令牌，如果合法就放行，如果不合法就拦截。如果前端没有登录，或者是携带的token被篡改，解析jwt就一定报错
        try {
            JwtUtils.parseJWT(token);
            return true; //进入controller
        } catch (Exception e) {
            //说明用户未登录，或者token异常
            Result not_login = Result.error("NOT_LOGIN");
            //将Result对象转为json字符串
            String json = JSON.toJSONString(not_login);
            log.info("用户未登录...{}", json);
            response.getWriter().write(json);
            return false;
        }

    }
}
